S = deserialize_v2(str)
Deserialize Matlab variable, without writing to disk.
str | char[1,P] | serialized form of S. Encode with serialize_v2. |
S | any | A Matlab variable. |
serialize_v2: CONVERSION: getByteStreamFromArray zipdata encodebase64 DATATYPE: Any Matlab datatype ====> uint8 array ====> int8 array ====> char array deserialize_v2: CONVERSION: getByteStreamFromArray unzipdata decodebase64 DATATYPE: Any Matlab datatype <==== uint8 array <==== int8 array <==== char array NOTES: serialize_v2 and deserialize_v2 are improved versions of serialize and deserialize. The following improvements where implemented: - no reading or writing of tempfiles required - lower CPU tim erequired - usage of Base64 encoding instead of hex encoding results in smaller transfer size BENCHARK: Setup: a randon vector of N doubles was serializedan deserialized. CPU time and serialized size were compared between new an dold method. Benchmark result table (NEW=serialize_v2, OLD=serialize): CPUNEW CPUOLD SIZENEW SIZEOLD SIZE [sec] [sec] [bytes] [bytes] 10 0.0012 0.0173 184 516 100 0.0007 0.0116 1160 1984 1000 0.0016 0.0153 10160 15486 10000 0.0124 0.0598 100688 151706 100000 0.0903 0.4767 1006020 1513756 1000000 1.1486 4.6368 10058932 15132634 Further notes: - in the new method, about 50% of the CPU time is used by a "lowtech" module BASE64.encode/decode. - in the old method about 90% of the CPU time is used by an aeven more lowtech module dec2hex. This indicates much room for improvement. - This also indicates that the Matlab save method (including compression) is faster than in memory compression, which is supprising. BENCHMARK SCRIPT: if nargin==0 N=6; for k=1:N n(k)=10^k; input=rand(1,n(k)); tic; byteData=serialize_v2(input); copy=deserialize_v2(byteData); t1(k)=toc; l1(k)=length(byteData); assert(all(input==copy),'desrialize(serialize(data))~=data') tic; byteData=serialize(input,false); copy=deserialize(byteData,false); t2(k)=toc; l2(k)=length(byteData); assert(all(input==copy),'desrialize(serialize(data))~=data') end figure('name','cpu'); plot(t1); line(1:N,t2,'col','r') legend('stateless','disk method'); figure('name','bytes transferred'); plot(l1); line(1:N,l2,'col','r') legend('stateless','disk method'); disp([n(:),t1(:),t2(:),l1(:),l2(:)]); return end Copyright 2006-2015 Modelit, www.modelit.nl